1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package com.google.common.collect.testing.google;
18
19 import static com.google.common.collect.testing.features.CollectionSize.ZERO;
20 import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_KEYS;
21 import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_VALUES;
22 import static com.google.common.collect.testing.features.MapFeature.SUPPORTS_PUT;
23 import static com.google.common.collect.testing.features.MapFeature.SUPPORTS_REMOVE;
24 import static com.google.common.truth.Truth.assertThat;
25
26 import com.google.common.annotations.GwtCompatible;
27 import com.google.common.collect.Multimap;
28 import com.google.common.collect.testing.Helpers;
29 import com.google.common.collect.testing.features.CollectionSize;
30 import com.google.common.collect.testing.features.MapFeature;
31
32 import java.util.ArrayList;
33 import java.util.Arrays;
34 import java.util.Collection;
35 import java.util.Collections;
36 import java.util.List;
37
38
39
40
41
42
43 @GwtCompatible
44 public class MultimapReplaceValuesTester<K, V>
45 extends AbstractMultimapTester<K, V, Multimap<K, V>> {
46
47 @MapFeature.Require({SUPPORTS_PUT, SUPPORTS_REMOVE, ALLOWS_NULL_VALUES})
48 public void testReplaceValuesWithNullValue() {
49 int size = multimap().size();
50 K key = sampleKeys().e0;
51 @SuppressWarnings("unchecked")
52 List<V> values = Arrays.asList(sampleValues().e0, null, sampleValues().e3);
53 multimap().replaceValues(key, values);
54 assertGet(key, values);
55 }
56
57 @MapFeature.Require({SUPPORTS_PUT, SUPPORTS_REMOVE, ALLOWS_NULL_KEYS})
58 public void testReplaceValuesWithNullKey() {
59 int size = multimap().size();
60 K key = null;
61 @SuppressWarnings("unchecked")
62 List<V> values = Arrays.asList(sampleValues().e0, sampleValues().e2, sampleValues().e3);
63 multimap().replaceValues(key, values);
64 assertGet(key, values);
65 }
66
67 @MapFeature.Require({SUPPORTS_PUT, SUPPORTS_REMOVE})
68 public void testReplaceEmptyValues() {
69 int size = multimap().size();
70 K key = sampleKeys().e3;
71 @SuppressWarnings("unchecked")
72 List<V> values = Arrays.asList(sampleValues().e0, sampleValues().e2, sampleValues().e3);
73 multimap().replaceValues(key, values);
74 assertGet(key, values);
75 assertEquals(size + values.size(), multimap().size());
76 }
77
78 @MapFeature.Require({SUPPORTS_PUT, SUPPORTS_REMOVE})
79 public void testReplaceValuesWithEmpty() {
80 int size = multimap().size();
81 K key = sampleKeys().e0;
82 List<V> oldValues = new ArrayList<V>(multimap().get(key));
83 @SuppressWarnings("unchecked")
84 List<V> values = Collections.emptyList();
85 assertEquals(oldValues, new ArrayList<V>(multimap().replaceValues(key, values)));
86 assertGet(key);
87 assertEquals(size - oldValues.size(), multimap().size());
88 }
89
90 @MapFeature.Require({SUPPORTS_PUT, SUPPORTS_REMOVE})
91 public void testReplaceValuesWithDuplicates() {
92 int size = multimap().size();
93 K key = sampleKeys().e0;
94 List<V> oldValues = new ArrayList<V>(multimap().get(key));
95 List<V> values = Arrays.asList(
96 sampleValues().e0,
97 sampleValues().e3,
98 sampleValues().e0);
99 assertEquals(oldValues, new ArrayList<V>(multimap().replaceValues(key, values)));
100 assertEquals(
101 size - oldValues.size() + multimap().get(key).size(),
102 multimap().size());
103 assertTrue(multimap().get(key).containsAll(values));
104 }
105
106 @CollectionSize.Require(absent = ZERO)
107 @MapFeature.Require({SUPPORTS_PUT, SUPPORTS_REMOVE})
108 public void testReplaceNonEmptyValues() {
109 List<K> keys = Helpers.copyToList(multimap().keySet());
110 @SuppressWarnings("unchecked")
111 List<V> values = Arrays.asList(sampleValues().e0, sampleValues().e2, sampleValues().e3);
112
113 for (K k : keys) {
114 resetContainer();
115
116 int size = multimap().size();
117 Collection<V> oldKeyValues = Helpers.copyToList(multimap().get(k));
118 multimap().replaceValues(k, values);
119 assertGet(k, values);
120 assertEquals(size + values.size() - oldKeyValues.size(), multimap().size());
121 }
122 }
123
124 @MapFeature.Require({SUPPORTS_PUT, SUPPORTS_REMOVE})
125 public void testReplaceValuesPropagatesToGet() {
126 K key = sampleKeys().e0;
127 Collection<V> getCollection = multimap().get(key);
128 @SuppressWarnings("unchecked")
129 List<V> values = Arrays.asList(sampleValues().e0, sampleValues().e2, sampleValues().e3);
130 multimap().replaceValues(key, values);
131 assertThat(getCollection).has().exactly(
132 sampleValues().e0, sampleValues().e2, sampleValues().e3);
133 }
134
135 @MapFeature.Require(absent = SUPPORTS_REMOVE)
136 @CollectionSize.Require(absent = ZERO)
137 public void testReplaceValuesRemoveNotSupported() {
138 List<V> values = Collections.singletonList(sampleValues().e3);
139 try {
140 multimap().replaceValues(sampleKeys().e0, values);
141 fail("Expected UnsupportedOperationException");
142 } catch (UnsupportedOperationException expected) {
143
144 }
145 }
146
147 @MapFeature.Require(absent = SUPPORTS_PUT)
148 public void testReplaceValuesPutNotSupported() {
149 List<V> values = Collections.singletonList(sampleValues().e3);
150 try {
151 multimap().replaceValues(sampleKeys().e0, values);
152 fail("Expected UnsupportedOperationException");
153 } catch (UnsupportedOperationException expected) {
154
155 }
156 }
157 }